package io.github.echarts.option.style;

/**
 * 标签样式配置类
 */
public class LabelStyle {
    private Boolean show = true;  // 是否显示标签
    private String position;  // 标签位置
    private Double distance = 5.0;  // 距离图形元素的距离
    private Double rotate;  // 标签旋转角度
    private String color;  // 文字颜色
    private String fontStyle = "normal";  // 字体风格
    private String fontWeight = "normal";  // 字体粗细
    private String fontFamily = "sans-serif";  // 字体系列
    private Double fontSize = 12.0;  // 字体大小
    private String align;  // 文字水平对齐方式
    private String verticalAlign;  // 文字垂直对齐方式
    private Integer lineHeight;  // 行高
    private String backgroundColor;  // 标签背景色
    private String borderColor;  // 标签边框颜色
    private Double borderWidth = 0.0;  // 标签边框宽度
    private Double borderRadius = 0.0;  // 标签边框圆角
    private Integer padding = 0;  // 标签内边距
    private String formatter;  // 标签格式化器

    // 构造函数
    public LabelStyle() {
    }

    /**
     * 设置是否显示标签
     * @param show 是否显示
     * @return 当前实例
     */
    public LabelStyle setShow(Boolean show) {
        this.show = show;
        return this;
    }

    /**
     * 设置标签位置
     * @param position 位置，可选值：'top'、'left'、'right'、'bottom'、'inside'、'outside' 等
     * @return 当前实例
     */
    public LabelStyle setPosition(String position) {
        this.position = position;
        return this;
    }

    /**
     * 设置距离图形元素的距离
     * @param distance 距离值
     * @return 当前实例
     */
    public LabelStyle setDistance(Double distance) {
        this.distance = distance;
        return this;
    }

    /**
     * 设置标签旋转角度
     * @param rotate 旋转角度
     * @return 当前实例
     */
    public LabelStyle setRotate(Double rotate) {
        this.rotate = rotate;
        return this;
    }

    /**
     * 设置文字颜色
     * @param color 颜色值，RGB或十六进制颜色值
     * @return 当前实例
     */
    public LabelStyle setColor(String color) {
        this.color = color;
        return this;
    }

    /**
     * 设置字体风格
     * @param fontStyle 字体风格，可选值：'normal'、'italic'、'oblique'
     * @return 当前实例
     */
    public LabelStyle setFontStyle(String fontStyle) {
        this.fontStyle = fontStyle;
        return this;
    }

    /**
     * 设置字体粗细
     * @param fontWeight 字体粗细，可选值：'normal'、'bold'、'bolder'、'lighter'
     * @return 当前实例
     */
    public LabelStyle setFontWeight(String fontWeight) {
        this.fontWeight = fontWeight;
        return this;
    }

    /**
     * 设置字体系列
     * @param fontFamily 字体系列
     * @return 当前实例
     */
    public LabelStyle setFontFamily(String fontFamily) {
        this.fontFamily = fontFamily;
        return this;
    }

    /**
     * 设置字体大小
     * @param fontSize 字体大小
     * @return 当前实例
     */
    public LabelStyle setFontSize(Double fontSize) {
        this.fontSize = fontSize;
        return this;
    }

    /**
     * 设置文字水平对齐方式
     * @param align 对齐方式，可选值：'left'、'center'、'right'
     * @return 当前实例
     */
    public LabelStyle setAlign(String align) {
        this.align = align;
        return this;
    }

    /**
     * 设置文字垂直对齐方式
     * @param verticalAlign 垂直对齐方式，可选值：'top'、'middle'、'bottom'
     * @return 当前实例
     */
    public LabelStyle setVerticalAlign(String verticalAlign) {
        this.verticalAlign = verticalAlign;
        return this;
    }

    /**
     * 设置行高
     * @param lineHeight 行高
     * @return 当前实例
     */
    public LabelStyle setLineHeight(Integer lineHeight) {
        this.lineHeight = lineHeight;
        return this;
    }

    /**
     * 设置标签背景色
     * @param backgroundColor 背景色
     * @return 当前实例
     */
    public LabelStyle setBackgroundColor(String backgroundColor) {
        this.backgroundColor = backgroundColor;
        return this;
    }

    /**
     * 设置标签边框颜色
     * @param borderColor 边框颜色
     * @return 当前实例
     */
    public LabelStyle setBorderColor(String borderColor) {
        this.borderColor = borderColor;
        return this;
    }

    /**
     * 设置标签边框宽度
     * @param borderWidth 边框宽度
     * @return 当前实例
     */
    public LabelStyle setBorderWidth(Double borderWidth) {
        this.borderWidth = borderWidth;
        return this;
    }

    /**
     * 设置标签边框圆角
     * @param borderRadius 边框圆角
     * @return 当前实例
     */
    public LabelStyle setBorderRadius(Double borderRadius) {
        this.borderRadius = borderRadius;
        return this;
    }

    /**
     * 设置标签内边距
     * @param padding 内边距
     * @return 当前实例
     */
    public LabelStyle setPadding(Integer padding) {
        this.padding = padding;
        return this;
    }

    /**
     * 设置标签格式化器
     * @param formatter 格式化器
     * @return 当前实例
     */
    public LabelStyle setFormatter(String formatter) {
        this.formatter = formatter;
        return this;
    }

    // Getters
    public Boolean getShow() {
        return show;
    }

    public String getPosition() {
        return position;
    }

    public Double getDistance() {
        return distance;
    }

    public Double getRotate() {
        return rotate;
    }

    public String getColor() {
        return color;
    }

    public String getFontStyle() {
        return fontStyle;
    }

    public String getFontWeight() {
        return fontWeight;
    }

    public String getFontFamily() {
        return fontFamily;
    }

    public Double getFontSize() {
        return fontSize;
    }

    public String getAlign() {
        return align;
    }

    public String getVerticalAlign() {
        return verticalAlign;
    }

    public Integer getLineHeight() {
        return lineHeight;
    }

    public String getBackgroundColor() {
        return backgroundColor;
    }

    public String getBorderColor() {
        return borderColor;
    }

    public Double getBorderWidth() {
        return borderWidth;
    }

    public Double getBorderRadius() {
        return borderRadius;
    }

    public Integer getPadding() {
        return padding;
    }

    public String getFormatter() {
        return formatter;
    }
} 